//package io.renren.modules.sys.service.impl;
//
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.baomidou.mybatisplus.core.metadata.IPage;
//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//import io.renren.common.utils.PageUtils;
//import io.renren.common.utils.Query;
//import io.renren.modules.sys.dao.TablesInfoDao;
//import io.renren.modules.sys.entity.ColumnsEntity;
//import io.renren.modules.sys.entity.DatabaseinfoEntity;
//import io.renren.modules.sys.service.TablesInfoService;
//import org.springframework.stereotype.Service;
//
//import java.sql.*;
//import java.text.NumberFormat;
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//
//@Service("tablesInfoService")
//public class TablesInfoServiceImpl extends ServiceImpl<TablesInfoDao, TablesInfoEntity> implements TablesInfoService {
//
//    @Override
//    public PageUtils queryPage(Map<String, Object> params) {
//        IPage<TablesInfoEntity> page = this.page(
//                new Query<TablesInfoEntity>().getPage(params),
//                new QueryWrapper<TablesInfoEntity>()
//        );
//
//        return new PageUtils(page);
//    }
//
//    @Override
//    public List<TablesInfoEntity> mysqlQueryTable(Connection conn, List<TablesInfoEntity> tables, DatabaseinfoEntity databaseinfoEntity, String connid) {
//        DatabaseMetaData dbMetaData = null;
//        ResultSet rs = null;
//        try {
//            dbMetaData = conn.getMetaData();
//            rs = dbMetaData.getTables(null, null, null, new String[]{"TABLE"});
//            int i = 1;
//            while (rs.next()) {
//                if (rs.getString("TABLE_CAT").equals(databaseinfoEntity.getConnname()) || rs.getString("TABLE_CAT") == databaseinfoEntity.getConnname()) {
//
//                    TablesInfoEntity tablesInfoEntity = new TablesInfoEntity();
//                    tablesInfoEntity.setId(i);
//                    tablesInfoEntity.setTableName(rs.getString("TABLE_NAME"));
//                    tablesInfoEntity.setTableType("MySql");
//                    tablesInfoEntity.setTableCat(rs.getString("TABLE_CAT"));
//                    tablesInfoEntity.setTableSchem(rs.getString("TABLE_SCHEM"));
//                    tablesInfoEntity.setRemarks(rs.getString("REMARKS"));
//                    tablesInfoEntity.setConnid(connid);
//                    tablesInfoEntity.setConnname(databaseinfoEntity.getConnname());
//
//                    tables.add(tablesInfoEntity);
//                    i++;
//
//                }
//            }
//        } catch (SQLException e) {
//            e.printStackTrace();
//        } finally {
//            try {
//                rs.close();
//            } catch (SQLException e) {
//                e.printStackTrace();
//            }
//        }
//        return tables;
//    }
//
//    @Override
//    public List<TablesInfoEntity> pgsqlQueryTable(Connection conn, List<TablesInfoEntity> tables, DatabaseinfoEntity databaseinfoEntity, String connid) {
//        PreparedStatement ps = null;
//        ResultSet rs = null;
//        String sql = "select * from pg_tables";
//
//        try {
//            ps = conn.prepareStatement(sql);
//            rs = ps.executeQuery();
//
//            int count = 0;
//            while (rs.next()) {
//                count++;
//
//                String schemaname = rs.getString("schemaname");
//                String tablename = rs.getString("tablename");
//                if (schemaname.equals("public") || schemaname == "public") {
//                    TablesInfoEntity tablesInfoEntity = new TablesInfoEntity();
//                    tablesInfoEntity.setId(count);
//                    tablesInfoEntity.setTableName(tablename);
//                    tablesInfoEntity.setTableType("PostgreSQL");
//                    tablesInfoEntity.setTableCat(databaseinfoEntity.getConnname());
//                    tablesInfoEntity.setTableSchem("");
//                    tablesInfoEntity.setRemarks("");
//                    tablesInfoEntity.setConnid(connid);
//                    tablesInfoEntity.setConnname(databaseinfoEntity.getConnname());
//                    tables.add(tablesInfoEntity);
//                }
//            }
//
//        } catch (SQLException e) {
//            e.printStackTrace();
//        } finally {
//            try {
//                rs.close();
//                ps.close();
//            } catch (SQLException e) {
//                e.printStackTrace();
//            }
//
//        }
//        return tables;
//    }
//
//    @Override
//    public HashMap mysqlQueryColumns(Connection conn, String tableName) {
//
//        HashMap map = new HashMap();
//
//        List<ColumnsEntity> columns = new ArrayList<>();
//        PreparedStatement ps = null;
//        ResultSet rs = null;
//
//        String sql = "SELECT column_name," +
//                "column_comment," +
//                "data_type," +
//                "CHARACTER_MAXIMUM_LENGTH " +
//                "FROM information_schema.COLUMNS WHERE table_name = '" + tableName + "'";
//        try {
//            ps = conn.prepareStatement(sql);
//            rs = ps.executeQuery();
//            PreparedStatement psByCount = null;
//            ResultSet rsByCount = null;
//            String sqlCount = "select count(*) from " + tableName;
//            psByCount = conn.prepareStatement(sqlCount);
//            rsByCount = psByCount.executeQuery();
//
//            int count = 0;
//            if (rsByCount.next()) {
//                count = rsByCount.getInt(1);//ResultSet结果集中的第一个参数就是记录数，其实结果集中只有一个参数
//            }
//
//            int i = 0;
//            while (rs.next()) {
//                i++;
//                ColumnsEntity columnsEntity = new ColumnsEntity();
//                columnsEntity.setId(i);
//                columnsEntity.setColumnName(rs.getString("column_name"));
//                columnsEntity.setColumnType(rs.getString("data_type"));
//                columnsEntity.setLength(rs.getString("CHARACTER_MAXIMUM_LENGTH"));
//                columnsEntity.setZs(rs.getString("column_comment"));
//
//                PreparedStatement psByTcl = null;
//                ResultSet rsByTcl = null;
//
//                String sqlTcl = "SELECT COUNT(*) from " + tableName + "  where " + rs.getString("column_name") + " is not  NULL ";
//                psByTcl = conn.prepareStatement(sqlTcl);
//                rsByTcl = psByTcl.executeQuery();
//                int countByTcl = 0;
//                if (rsByTcl.next()) {
//                    countByTcl = rsByTcl.getInt(1);//ResultSet结果集中的第一个参数就是记录数，其实结果集中只有一个参数
//                }
//                rsByTcl.close();
//                psByTcl.close();
//
//
//                NumberFormat numberFormat = NumberFormat.getInstance();
//                String result = numberFormat.format((float) countByTcl / (float) count * 100);
//                columnsEntity.setTcl(result + "%");
//                columns.add(columnsEntity);
//
//            }
//            map.put("0", tableName);
//            map.put("1", count);
//            map.put("2", columns);
//
//
//            rsByCount.close();
//            psByCount.close();
//        } catch (SQLException e) {
//            e.printStackTrace();
//        } finally {
//            try {
//                rs.close();
//                ps.close();
//            } catch (SQLException e) {
//                e.printStackTrace();
//            }
//        }
//
//
//        return map;
//
//    }
//
//    @Override
//    public List<ColumnsEntity> pgsqlQueryColumns(Connection conn, String tableName) {
//        List<ColumnsEntity> columns = new ArrayList<>();
//        PreparedStatement ps = null;
//        ResultSet rs = null;
//
//        String sql = "SELECT a.attname ," +
//                "col_description(a.attrelid,a.attnum) ," +
//                "t.typname ," +
//                "SUBSTRING(format_type(a.atttypid,a.atttypmod) from '\\(.*\\)') , " +
//                "concat_ws('',t.typname,SUBSTRING(format_type(a.atttypid,a.atttypmod) from '\\(.*\\)')) " +
//                "FROM  pg_class as c,pg_attribute as a, pg_type as t " +
//                "WHERE  c.relname = '" + tableName + "' and a.atttypid = t.oid and a.attrelid = c.oid and a.attnum>0";
//        try {
//            ps = conn.prepareStatement(sql);
//            rs = ps.executeQuery();
//            PreparedStatement psByCount = null;
//            ResultSet rsByCount = null;
//            String sqlCount = "select count(*) from " + tableName;
//            psByCount = conn.prepareStatement(sqlCount);
//            rsByCount = psByCount.executeQuery();
//
//            int count = 0;
//            if (rsByCount.next()) {
//                count = rsByCount.getInt(1);//ResultSet结果集中的第一个参数就是记录数，其实结果集中只有一个参数
//            }
//
//            int i = 0;
//            while (rs.next()) {
//                i++;
//                ColumnsEntity columnsEntity = new ColumnsEntity();
//                columnsEntity.setId(i);
//                columnsEntity.setColumnName(rs.getString("attname"));
//                columnsEntity.setColumnType(rs.getString("typname"));
//                columnsEntity.setLength(rs.getString("substring"));
//                columnsEntity.setZs(rs.getString("col_description"));
//
//                PreparedStatement psByTcl = null;
//                ResultSet rsByTcl = null;
//
//                String sqlTcl = "SELECT COUNT(*) from " + tableName + "  where " + rs.getString("attname") + " is not  NULL ";
//                psByTcl = conn.prepareStatement(sqlTcl);
//                rsByTcl = psByTcl.executeQuery();
//                int countByTcl = 0;
//                if (rsByTcl.next()) {
//                    countByTcl = rsByTcl.getInt(1);//ResultSet结果集中的第一个参数就是记录数，其实结果集中只有一个参数
//                }
//                rsByTcl.close();
//                psByTcl.close();
//
//
//                NumberFormat numberFormat = NumberFormat.getInstance();
//                String result = numberFormat.format((float) countByTcl / (float) count * 100);
//                columnsEntity.setTcl(result + "%");
//                columns.add(columnsEntity);
//
//            }
//            rsByCount.close();
//            psByCount.close();
//        } catch (SQLException e) {
//            e.printStackTrace();
//        } finally {
//            try {
//                rs.close();
//                ps.close();
//            } catch (SQLException e) {
//                e.printStackTrace();
//            }
//        }
//
//
//        return columns;
//    }
//
//
//    @Override
//    public List<TablesInfoEntity> oracleQueryTable(Connection conn, List<TablesInfoEntity> tables, DatabaseinfoEntity databaseinfoEntity, String connid) {
//
//        String sql = "select TABLE_NAME from all_tables WHERE owner='" + databaseinfoEntity.getConnname() + "'";
//        try {
//            Statement stmt = conn.createStatement();
//            ResultSet rs = stmt.executeQuery(sql);
//
//            int count = 0;
//            while (rs.next()) {
//                count++;
//
//                String tablename = rs.getString("TABLE_NAME");
//                TablesInfoEntity tablesInfoEntity = new TablesInfoEntity();
//                tablesInfoEntity.setId(count);
//                tablesInfoEntity.setTableName(tablename);
//                tablesInfoEntity.setTableType("ORACLE");
//                tablesInfoEntity.setTableCat(databaseinfoEntity.getConnname());
//                tablesInfoEntity.setTableSchem("");
//                tablesInfoEntity.setRemarks("");
//                tablesInfoEntity.setConnid(connid);
//                tablesInfoEntity.setConnname(databaseinfoEntity.getConnname());
//                tables.add(tablesInfoEntity);
//
//            }
//            rs.close();
//            stmt.close();
//            rs.close();
//        } catch (SQLException e) {
//            e.printStackTrace();
//        }
//        return tables;
//    }
//
//
//    @Override
//    public List<ColumnsEntity> oracleQueryColumns(Connection conn, String tableName) {
//
//        List<ColumnsEntity> columns = new ArrayList<>();
//        PreparedStatement ps = null;
//        ResultSet rs = null;
//
//        String sql = "select column_name from user_col_comments  where table_name = '" + tableName + "'";
//        try {
//            ps = conn.prepareStatement(sql);
//            rs = ps.executeQuery();
//            PreparedStatement psByCount = null;
//            ResultSet rsByCount = null;
//            String sqlCount = "select count(*) from " + tableName;
//            psByCount = conn.prepareStatement(sqlCount);
//            rsByCount = psByCount.executeQuery();
//
//            int count = 0;
//            if (rsByCount.next()) {
//                count = rsByCount.getInt(1);//ResultSet结果集中的第一个参数就是记录数，其实结果集中只有一个参数
//            }
//
//            int i = 0;
//            while (rs.next()) {
//                i++;
//                ColumnsEntity columnsEntity = new ColumnsEntity();
//                columnsEntity.setId(i);
//                columnsEntity.setColumnName(rs.getString("column_name"));
//                columnsEntity.setColumnType("");
//                columnsEntity.setLength("");
//                columnsEntity.setZs("");
//
//                PreparedStatement psByTcl = null;
//                ResultSet rsByTcl = null;
//
//                String sqlTcl = "SELECT COUNT(*) from " + tableName + "  where " + rs.getString("column_name") + " is not  NULL ";
//                psByTcl = conn.prepareStatement(sqlTcl);
//                rsByTcl = psByTcl.executeQuery();
//                int countByTcl = 0;
//                if (rsByTcl.next()) {
//                    countByTcl = rsByTcl.getInt(1);//ResultSet结果集中的第一个参数就是记录数，其实结果集中只有一个参数
//                }
//                rsByTcl.close();
//                psByTcl.close();
//
//
//                NumberFormat numberFormat = NumberFormat.getInstance();
//                String result = numberFormat.format((float) countByTcl / (float) count * 100);
//                columnsEntity.setTcl(result + "%");
//                columns.add(columnsEntity);
//
//            }
//            rsByCount.close();
//            psByCount.close();
//        } catch (SQLException e) {
//            e.printStackTrace();
//        } finally {
//            try {
//                rs.close();
//                ps.close();
//            } catch (SQLException e) {
//                e.printStackTrace();
//            }
//        }
//
//
//        return columns;
//
//    }
//}
